package com.atguigu.jxc.service.impl;

import com.atguigu.jxc.dao.GoodsDao;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.service.GoodsService;
import com.atguigu.jxc.util.StringUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class GoodsServiceImpl implements GoodsService {

    @Autowired
    private GoodsDao goodsDao;

    //查询当前库存（可根据商品类别、商品编码或名称搜索）
    @Override
    public Page<Goods> listInventory(Integer page, Integer rows, String codeOrName, Integer goodsTypeId) {
        //开启分页
        PageHelper.startPage(page,rows);
        //调用dao
        return goodsDao.listInventorySelect(codeOrName,goodsTypeId);
    }

    /////查询所有商品信息,根据分类、名称查询
    @Override
    public Map<String, Object> list(Integer page, Integer rows, String goodsName, Integer goodsTypeId) {
        //开启分页
        PageHelper.startPage(page,rows);
        Page<Goods> goodsPage=goodsDao.listSelect(goodsName,goodsTypeId);
        Map<String, Object> map=new HashMap<>();
        map.put("rows",goodsPage);
        map.put("total",goodsPage.getTotal());
        return map;
    }

    ////商品添加或修改
    @Override
    public void save(Goods goods) {
        if (goods.getGoodsId()!=null){
            //修改商品信息实体
            goodsDao.updateGoods(goods);
        }else {
            //新增商品信息实体
            goods.setInventoryQuantity(0);
            goods.setLastPurchasingPrice(goods.getPurchasingPrice());//同步进货价格
            goods.setState(0);
           goodsDao.saveGoods(goods);
        }
    }

    //商品删除（要判断商品状态,入库、有进货和销售单据的不能删除）
    @Override
    public void delete(Integer goodsId) {
        //获取商品
        Goods goods=goodsDao.getGoodsById(goodsId);
        //商品删除（要判断商品状态,入库、有进货和销售单据的不能删除）
        if (goods.getState()==0) {
            //商品删除
            goodsDao.deleteGoods(goodsId);
        }
    }

    //无库存商品列表展示（可以根据商品名称或编码查询）
    @Override
    public Map<String, Object> getNoInventoryQuantity(Integer page, Integer rows, String nameOrCode) {
        //开启分页
        PageHelper.startPage(page,rows);
        Page<Goods> goodsPage=goodsDao.getNoInventoryQuantity(nameOrCode);
        Map<String, Object> map=new HashMap<>();
        map.put("rows",goodsPage);
        map.put("total",goodsPage.getTotal());
        return map;
    }

    //有库存商品列表展示（可以根据商品名称或编码查询
    @Override
    public Map<String, Object> getHasInventoryQuantity(Integer page, Integer rows, String nameOrCode) {
        //开启分页
        PageHelper.startPage(page,rows);
        Page<Goods> goodsPage=goodsDao.getHasInventoryQuantity(nameOrCode);
        Map<String, Object> map=new HashMap<>();
        map.put("rows",goodsPage);
        map.put("total",goodsPage.getTotal());
        return map;
    }

    //添加库存、修改数量或成本价
    @Override
    public void saveStock(Integer goodsId, Integer inventoryQuantity, double purchasingPrice) {
        goodsDao.saveStock(goodsId,inventoryQuantity,purchasingPrice);
    }

    //删除库存（要判断商品状态 入库、有进货和销售单据的不能删除）
    @Override
    public void deleteStock(Integer goodsId) {
        ////获取商品
        Goods goods=goodsDao.getGoodsById(goodsId);
        //商品删除（要判断商品状态,入库、有进货和销售单据的不能删除）
        if (goods.getState()==0) {
            //商品删除
            goods.setInventoryQuantity(0);
            goodsDao.updateGoods(goods);
        }
    }


    //查询所有 当前库存量 小于 库存下限的商品信息
    @Override
    public Map<String, Object> listAlarm() {
        List<Goods> goodsList= goodsDao.listAlarm();
        Map<String, Object> map=new HashMap<>();
        map.put("rows",goodsList);
        return map;
    }
}
